#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include "sessionfriendarea.h"
#include "messageshowarea.h"
#include "messageeditarea.h"

#include <QWidget>
#include <QPushButton>
#include <QLineEdit>

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWidget;
}
QT_END_NAMESPACE

class MainWidget : public QWidget
{
    Q_OBJECT
    ////////////////////////////////////////////////////////////
    /// 公有成员
    ////////////////////////////////////////////////////////////
public:

    ////////////////////////////////////////////////////////////
    /// 私有成员
    ////////////////////////////////////////////////////////////
private:
    static MainWidget *instance;            // 单例指针
    MainWidget(QWidget *parent = nullptr);  // 私有构造

    QWidget *windowLeft = nullptr;      // 主窗体左侧导航栏窗体
    QWidget *windowMid = nullptr;       // 主窗体中间列表区窗体
    QWidget *windowRight = nullptr;     // 主窗体右侧聊天区窗体

    QPushButton *userAvatarBtn = nullptr;   // 用户头像按钮
    QPushButton *sessionTabBtn = nullptr;   // 会话标签页按钮
    QPushButton *friendTabBtn = nullptr;    // 好友标签页按钮
    QPushButton *applyTabBtn = nullptr;     // 好友申请标签页按钮

    enum ActiveTab {
        SESSION_LIST,
        FRIEND_LIST,
        APPLY_LIST
    };

    ActiveTab activeTab = SESSION_LIST; // 当前处于激活状态(选中)的标签页

    QLineEdit *searchEdit = nullptr;                // 搜索框
    QPushButton *addFriendBtn = nullptr;            // 好友添加按钮
    SessionFriendArea *sessionFriendArea = nullptr; // 会话好友好友申请列表区域

    QPushButton *extraBtn = nullptr; // 主窗体的右侧子窗体的上方消息标题区的会话详情按钮
    MessageShowArea *messageShowArea = nullptr;     // 主窗体的右侧子窗体的中间消息展示区
    MessageEditArea *messageEditArea = nullptr;     // 主窗体的右侧子窗体的下方消息展示区

    ////////////////////////////////////////////////////////////
    /// 公有方法
    ////////////////////////////////////////////////////////////
public:
    static MainWidget* getInstance();
    ~MainWidget();

    // 点击好友项之后, 切换到会话列表的总的函数
    // switchTabToSession 只是其中的一个环节.
    void switchSession(const QString& userId);

    ////////////////////////////////////////////////////////////
    /// 私有方法
    ////////////////////////////////////////////////////////////
private:
    void initMainWindow();
    void initWindowLeft();
    void initWindowMid();
    void initWindowRight();

    void initSignalSlot();
    void switchTabToSession();
    void switchTabToFriend();
    void switchTabToApply();

    void loadSessionList();
    void loadFriendList();
    void loadApplyList();

private:
    Ui::MainWidget *ui;
};
#endif // MAINWIDGET_H
